package com.xncoding.pos.config.feign;

import feign.Retryer;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;

/**
 * 配置
 *
 * @Author guoyb
 * @Date 2022/6/8  19:01
 */
@Component
public class FeignConfig {

    /**
     * 日志级别
     * 通过源码可以看到日志等级有 4 种，分别是：
     * NONE：不输出日志。
     * BASIC：只输出请求方法的 URL 和响应的状态码以及接口执行的时间。
     * HEADERS：将 BASIC 信息和请求头信息输出。
     * FULL：输出完整的请求信息。
     */
    // @Bean
    // public Logger.Level feignLoggerLevel() {
    //     return Logger.Level.FULL;
    // }


    // @Bean
    // public Request.Options options() {
    //     return new Request.Options(5000, 5000);
    // }


    // feignPeriod: 发起重试的时间间隔，单位毫秒
    // feignMaxPeriod: 发起重试的最大时间间隔，单位毫秒
    // feignMaxAttempts: 重试次数，如果需要重试1次，就设置为2


    /**
     * 自定义拦截器
     *
     * @return
     */
    // @Bean
    // public FeignAuthRequestInterceptor feignAuthRequestInterceptor() {
    //     return new FeignAuthRequestInterceptor();
    // }

    @Value("${feign.period:500}")
    private long feignPeriod;

    @Value("${feign.maxPeriod:1000}")
    private long feignMaxPeriod;

    @Value("${feign.maxAttempts:2}")
    private int feignMaxAttempts;

    @Bean
    public Retryer feignRetryer() {
        return new Retryer.Default(feignPeriod, feignMaxPeriod, feignMaxAttempts);
    }

}
